/* 判断单链表是否有环 */

#include <iostream>
#include "headfun.h"
using namespace std;

// 判断链表是否有环
int findloop(LNode *L)
{
  // 创建快慢指针
  LNode *fast = L, *slow = L;
  
  // 快指针到达链表末尾，则无环
  while (fast != NULL && fast->next != NULL)
  {
    // 慢指针移动一步
    slow = slow->next;
    
    // 快指针移动两步
    fast = fast->next->next;
    
    // 快慢指针相遇，则有环
    if (slow == fast)
      return 1;
  }
  
  // 无环
  return 0;
}

int main()
{
  // 创建带头节点的链表
  LNode *L = head_Linklist();
  
  // 判断是否带环
  cout << "链表是否有环:" << findloop(L);
  return 0;
}
